package smallfrench.moteur.biblio.igu;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.AbstractButton;

import smallfrench.moteur.biblio.AClasse;
import smallfrench.moteur.biblio.AnnotationMembre;
import smallfrench.moteur.biblio.RChaine;
import smallfrench.moteur.biblio.RFonctionScript;
import smallfrench.moteur.interp.RObjet;

public class BoutonAbstrait extends Composant {

	public static final AClasse CLASSE = AClasse.creer(BoutonAbstrait.class);

	private AbstractButton abstractButton;

	private ArrayList<RFonctionScript> ecouteursActions;

	@AnnotationMembre
	public BoutonAbstrait() {
		ecouteursActions = new ArrayList<RFonctionScript>();
	}

	public AbstractButton getAbstractButton() {
		return abstractButton;
	}

	public void setAbstractButton(AbstractButton abstractButton) {
		this.abstractButton = abstractButton;
		super.setComponent(abstractButton);

		abstractButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				for (RFonctionScript i : ecouteursActions) {
					processusScript.ajouterEvenement(i, new RObjet[] {});
				}
			}
		});
	}

	@AnnotationMembre
	public void ajouterEcouteurAction(RFonctionScript e) {
		ecouteursActions.add(e);
	}

	@AnnotationMembre
	public void retirerEcouteurAction(RFonctionScript e) {
		ecouteursActions.remove(e);
	}

	@AnnotationMembre
	public void modifierTexte(RChaine s) {
		abstractButton.setText(s.valeur);
	}

	@AnnotationMembre
	public RChaine obtenirTexte() {
		return new RChaine(abstractButton.getText());
	}

	@AnnotationMembre
	public void modifierTexteInfo(RChaine s) {
		abstractButton.setToolTipText(s.valeur);
	}

	@AnnotationMembre
	public RChaine obtenirTexteInfo() {
		return new RChaine(abstractButton.getToolTipText());
	}

	@Override
	public Container getComponent() {
		return abstractButton;
	}

}
